package com.zipking.cloud.springbootmybatis.page;

import lombok.SneakyThrows;

import java.util.List;
import java.util.concurrent.Callable;

public class PageCommonQuery {

    @SneakyThrows
    public static <T> PageData buildPageData(
            Callable<Integer> countFunction,
            Callable<List<T>> listFunction) {
        // 1. 创建分页对象
        PageData pageData = new PageData();

        // 2. 计算满足的记录数
        int count = countFunction.call();

        // 3. 为 0，则表示没有符合的数据，直接返回
        if (count == 0) {
            pageData.setCount(0);
            return pageData;
        }
        // 4. 不为 0，计算记录详情
        List<T> resultList = listFunction.call();


        // 5. 封装记录总数和
        pageData.setCount(count);
        pageData.setResult(resultList);

        return pageData;
    }
}
